/**
 * Created by shenc on 2016/12/27.
 * 批量出库操作
 */

//商品弹出框出现时执行
var inventoryModal=$('#inventoryModal');
var inventoryModalBtn=$('#inventoryModalBtn');
var inventoryList=new InventoryList({
    getGoodsUrl:'/admin/goods/get_goods/by_ids',
    postUrl:'/admin/goods/batch_out_going',
    exportUrl:'/admin/goods/export/goods'
});

inventoryList.bind();

inventoryModalBtn.on('click',function () {
    inventoryList.init();
});
inventoryModal.on('hidden.bs.modal',function () {
    if(inventoryModal.find('.J-ok').attr('href')){
        window.location.reload();
    }
});
inventoryModal.on('click','.close',function () {
    var isOK=confirm('弹窗关闭后，已输入的出库数据将丢失，确定要关闭吗？');
    if(isOK){
        inventoryModal.modal('hide');
    }
});

//搜索商品
function InventoryList(opts){
    var def={
        trTpl:$('#goodsTrTpl').html(),
        jqP:'#inventoryModal',
        getGoodsUrl:'/js/test.json',
        postUrl:'/js/success.json',
        okCb:function(){}
    };

    this.config= $.extend({},def,opts||{});

    var This=this;
    var jqP=$(this.config.jqP);
    var goodsList=$('table.J-goodsTable');

    var goodsWrap=$('.J-goodsList',jqP);
    var pageWrap=$('.J-page',jqP);
    var footer=$('.J-footer',jqP);
    var loading=$('.J-loading',jqP);
    var selIds=getCookie('inventoryGoodIds');
    selIds=selIds?selIds.split(','):[];

    //页面初始化时，自动选择checkbox
    if(selIds.length>0){
        var chkBox = goodsList.find('.J-checkBox');
        for(var i=0;i<selIds.length;i++){
            var item=chkBox.filter(function () {
               return $(this).attr('id')*1==selIds[i]*1;
            });
            item.length&&item.prop('checked',true);
        }
    }

    this.init=function(){
        if(selIds.length){
            inventoryModal.find('.J-ok').removeAttr('href').text('确定');
            inventoryModal.modal('show');
            This.getData();
        }else{
            alert('请选择要出库的商品！');
        }
    };

    this.bind=function(){
        //选择
        goodsList.on('change','.J-checkBox',function () {
            var that=$(this),isChecked=that.is(':checked'),id=that.attr('id');
            var index=$.inArray(id,selIds);
            if(isChecked){
                index==-1&&selIds.push(id);
            }else{
                index!=-1&&selIds.splice(index,1);
            }
            setCookie('inventoryGoodIds',selIds.join());
        });

        //提交
        jqP.on('click','.J-ok',function () {
            if($(this).attr('href')) return true;
            var data=[],inputs=goodsWrap.find('input').filter(function () {
               return $(this).val();
            });

            for(var i=0;i<inputs.length;i++){
                data.push({
                    id:inputs.eq(i).attr('data-id'),
                    number:inputs.eq(i).val()
                });
            }

            if(data.length==0) {
                alert('请填写出库数量！');
                return false;
            }

            loading.removeClass('hide');
            $.ajax({url:This.config.postUrl,type:'post',dataType:'json',data:{"goods":data},
                success:function (res) {
                    if(res.status){
                        selIds=[];
                        setCookie('inventoryGoodIds','');

                        inventoryModal.find('.J-ok').attr('href',This.config.exportUrl+'?'+$.param({"goods":data})).text('下载批量出库商品列表').one('click',function () {
                            inventoryModal.modal('hide');
                        });
                    }else{
                        alert(e.message);
                    }
                },
                error:function(e){
                    alert(e.message||'请求出错，请重试！');
                },
                complete:function () {
                    loading.addClass('hide');
                }
            });
        });

        //删除按钮
        jqP.on('click','.J-del',function(){
            var that=$(this).closest('tr'),id=that.attr('data-id');
            selIds.splice($.inArray(id,selIds),1);
            setCookie('inventoryGoodIds',selIds.join());

            that.fadeOut(200,function () {
                that.remove();
            });
        });

        //输入框最大值
        jqP.on('blur','input',function () {
            var that=$(this),max=that.attr('data-max')*1,val=$.trim(that.val());
            that.val(val);
            if(!/^[0-9]*$/.test(val)){
                that.val(0);
            }else{
                max<val*1&&that.val(max);
            }
        });

        //换页
        jqP.on('click','.J-page a',function(){
            var page=$(this).attr('data-page');
            pageWrap.data('page',page);
            This.changePage(page);
        });
        //上一页
        jqP.on('click','.J-page .prev',function(){
            var page=pageWrap.data('page');
            if(page<=1) return false;
            page--;
            pageWrap.data('page',page);
            This.changePage(page);
        });
        //下一页
        jqP.on('click','.J-page .next',function(){
            var page=pageWrap.data('page'),max=pageWrap.data('max');
            if(page>=max) return false;
            page++;
            pageWrap.data('page',page);
            This.changePage(page);
        });
    };

    this.getData=function(){
        loading.removeClass('hide');
        var data={};
        for(var j=0;j<selIds.length;j++){
            data[j]=selIds[j];
        }

        $.ajax({
            url:This.config.getGoodsUrl,
            type:'get',
            dataType:'json',
            data:{'goods_ids':data},
            success:function(res){
                var trsHtml= This.makeHtml(res);
                if(trsHtml.length>0){
                    goodsWrap.html(trsHtml.join(""));
                    trsHtml.length>10&&goodsWrap.find('tr').eq(9).nextAll().hide();
                }else{
                    goodsWrap.html("");
                }
                This.pager(1);
            },
            error:function(e){
                alert(e.message||'请求失败,请重试！');
            },
            complete:function () {
                loading.addClass('hide');
            }
        });
    };

    this.makeHtml=function(data){
        var trs=[];
        var tr=This.config.trTpl;
        //商品类型，0：一般商品，1：e贸易商品
        var type=['一般商品','e贸易商品'];
        //核审状态：0：未审核；1：审核通过；2：审核不通过
        var audit_status=['未审核','审核通过','审核不通过'];
        //是否上架，1：上架；2：下架
        var is_on_sale=['','上架','下架'];

        for(var i=0;i<data.length;i++){
            var curData=data[i];
            //处理数据
            curData.type=type[curData.type];
            curData.audit_status=audit_status[curData.audit_status];
            curData.is_on_sale=is_on_sale[curData.is_on_sale];

            trs.push(tools.htmlTemplate(tr,curData));
        }

        return trs;
    };

    this.pager=function(curPage){
        var pageHtml=[],trs=goodsWrap.find('tr');
        if(trs.length<=10){
            pageWrap.find('.pagination').html('');
            return false;
        }

        var last_page=Math.ceil(trs.length/10);
        curPage=curPage?curPage:1;
        //上一页
        pageHtml.push('<li class="prev disabled" title="上一页"><span role="button">«</a></li>');
        //中间页面
        for(var i=1;i<=last_page;i++){
            if(i==1){
                pageHtml.push('<li class="active"><a role="button" data-page="'+i+'">'+i+'</a></li>');
            }else{
                pageHtml.push('<li><a role="button" data-page="'+i+'">'+i+'</a></li>');
            }
        }
        //下一页
        pageHtml.push('<li class="next" title="下一页"><span role="button">»</a></li>');

        //渲染页面 绑定数据
        pageWrap.find('.pagination').html(pageHtml.join(''));
        pageWrap.data({'page':curPage,"max":last_page});
        return [curPage,last_page];
    };

    this.changePage=function (page) {
        var tr=goodsWrap.find('tr');
        tr.show();
        tr.eq(page*10-1).nextAll('tr').hide();
        tr.eq(page*10-10).prevAll('tr').hide();

        pageWrap.find('.next').toggleClass('disabled',page>=pageWrap.data('max'));
        pageWrap.find('.prev').toggleClass('disabled',page<=1);
        pageWrap.find('li').removeClass('active').filter(function () {
            return $(this).find('a').attr('data-page')==page;
        }).addClass('active');
    };
}
